<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: VMS</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/os_vms.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>os_vms</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="os_vms.txt">os_vms.txt</a> </b>    适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册</code>
                                <code class="vim">译者</code>: Willis


                                                        <b class="vimtag"> <a name="VMS">VMS</a> </b> <b class="vimtag"> <a name="vms">vms</a> </b>
本文件讨论 Vim 的 VMS 版本的特点。你可以在 Vim 命令提示下输入 :help VMS 得到本
帮助文件。

 1. 准备开始             <a href="os_vms.html#vms-started">vms-started</a> 
 2. 下载文件             <a href="os_vms.html#vms-download">vms-download</a> 
 3. 编译                 <a href="os_vms.html#vms-compiling">vms-compiling</a> 
 4. 问题                 <a href="os_vms.html#vms-problems">vms-problems</a> 
 5. 布署                 <a href="os_vms.html#vms-deploy">vms-deploy</a> 
 6. 实际使用方法         <a href="os_vms.html#vms-usage">vms-usage</a> 
 7. GUI 模式的问题       <a href="os_vms.html#vms-gui">vms-gui</a> 
 8. 有用的提示           <a href="os_vms.html#vms-notes">vms-notes</a> 
 9. VMS 相关改动         <a href="os_vms.html#vms-changes">vms-changes</a> 
10. 作者                 <a href="os_vms.html#vms-authors">vms-authors</a> 

</section><hr class="doubleline" /><section class=inner>
<h4></h4>1. 准备开始                                             <b class="vimtag"> <a name="vms-started">vms-started</a> </b>

Vim (Vi IMproved) 是一个 Vi-兼容的文本编辑器，它能在人类知道的差不多一切操作系
统上运行。现在在 OpenVMS 上也可以了，不管是文本方式或者 X/Motif 方式。它拥有完
整的功能，和其他操作系统上的 Vim 也绝对兼容。

</section><hr class="doubleline" /><section class=inner>
<h4></h4>2. 下载文件                                             <b class="vimtag"> <a name="vms-download">vms-download</a> </b>

你可以从官方 Vim 站点用 ftp 下载 Vim 源代码:
        ftp://ftp.vim.org/pub/vim/
或者使用某个镜像站点:
        ftp://ftp.vim.org/pub/vim/MIRRORS

你可以从这里得到编译好的二进制文件:
        <a href="http://www.polarhome.com/vim/">http://www.polarhome.com/vim/</a>
        ftp://ftp.polarhome.com/pub/vim/

要使用预编译的二进制版本，你需要如下档案之一:

  vim-XX-exe-ia64-gui.zip       IA64 GUI/Motif 可执行文件
  vim-XX-exe-ia64-gtk.zip       IA64 GUI/GTK 可执行文件
  vim-XX-exe-ia64-term.zip      IA64 控制台可执行文件
  vim-XX-exe-axp-gui.zip        Alpha GUI/Motif 可执行文件
  vim-XX-exe-axp-gtk.zip        Alpha GUI/GTK 可执行文件
  vim-XX-exe-axp-term.zip       Alpha 控制台可执行文件
  vim-XX-exe-vax-gui.zip        VAX GUI 可执行文件
  vim-XX-exe-vax-term.zip       VAX 控制台可执行文件

当然还有 (可选)
  vim-XX-runtime.zip            运行时文件

二进制档案包括: vim.exe、ctags.exe、xxd.exe 等文件。

GTK 可执行文件需要 GTKLIB，后者在 Alpha 和 IA64 平台上可以得到。
</section><hr class="doubleline" /><section class=inner>
<h4></h4>3. 编译                                                 <b class="vimtag"> <a name="vms-compiling">vms-compiling</a> </b>

参见 [.SRC]INSTALLVMS.TXT 文件。

</section><hr class="doubleline" /><section class=inner>
<h4>4. 问题                                                 <b class="vimtag"> <a name="vms-problems">vms-problems</a> </b></h4>
代码经过 Open VMS 6.2 - 8.2 在 Alpha、VAX 和 IA64 平台以及 DEC C 编译器测试。
应该不会有大问题。如果你的系统缺少一些库，你可以调整 OS_VMS_CONF.H 文件。

如果你决定编译 Vim 时加上 +perl，+python 等选项，首先你需要下载 OpenVMS 的
Perl 和 Python 的发布版本。编译并布署需要的库，并修改 MAKE_VMS.MMS 文件的若干
行。在 Vim 这里，应该没有问题。

GTK、XPM 库的路径也应该在 MAKE_VMS.MMS 里配置。

<code class="note">注意</code>: 在 VAX 上，用 DEC C 编译器是没有问题的。VAX C 编译器在预处理指令方面和
ANSI C 不完全兼容，因而你需要使用转换程序，来完整这项麻烦的工作。详细的指令请
阅读 INSTALLvms.txt 文件。

MMS_VIM.EXE 是和 VIM.EXE 一起编译的，但是 XXD.EXE 需要切换到另一个目录并单独编
译。

CTAGS 不再是 Vim 源程序发布的一部分，但是 OpenVMS 专用的源程序可能还是如上所述
那样包含 CTAGS 的源代码。关于 VMS 上的 CTAGS 的更多信息可以参考
<a href="http://www.polarhome.com/ctags/">http://www.polarhome.com/ctags/</a>

高级的用户可能想试试修改 FEATURE.H。

你也可以编译时加上 +xfontset +xim 选项，但需要你做好 GUI 字体等设置。参见
Vim 命令行提示下的 :help xim。

你还可以使用带有 GTK 图标的 GUI。为此，你需要下载和安装 OpenVMS 版本的 GTK，或
至少是运行库里共享的图片: polarhome.com 里有 LIBGTK。
7.2 版本后 Vim 使用 GTK2+，而 OpenVMS 最后的 GTK 版本是 1.2.10，所以 GTK 版本
不再可用。

如果你有更多更高级的问题，请把你的问题发送到 Vim on VMS 邮件列表
&lt;vim-vms@polarhome.com&gt;
关于 vim-vms 列表的更多情况可以在这里找到:
<a href="http://www.polarhome.com/mailman/listinfo/vim-vms">http://www.polarhome.com/mailman/listinfo/vim-vms</a>

</section><hr class="doubleline" /><section class=inner>
<h4></h4>5. 布署                                                 <b class="vimtag"> <a name="vms-deploy">vms-deploy</a> </b>

Vim 使用一个特定的目录结构来保存文档和运行时文件:

   vim (或者随便什么名字)
    |- tmp
    |- vim57
    |----- doc
    |----- syntax
    |- vim62
    |----- doc
    |----- syntax
    |- vim64
    |----- doc
    |----- syntax
    vimrc    (系统 rc 文件)
    gvimrc

使用: 
<code class="example"></code>
<code class="example">        define/nolog VIM        device:[path.vim]</code>
<code class="example">        define/nolog VIMRUNTIME device:[path.vim.vim60]</code>
<code class="example">        define/nolog TMP        device:[path.tmp]</code>
<code class="example"></code>
可以使 vim.exe 找到它的文档，文件类型，语法文件，并指定哪里可以存放临时文件。
把 Vim 发布版本的 "runtime" 子目录复制到 vimruntime 目录里。

逻辑名 $VIMRUNTIME 和 $TMP 是可选的。

如果 $VIMRUNTIME 没有设置，Vim 会猜测并试图自动设置。更多情况可以查阅 :help
runtime。

如果 $TMP 没有设置，你就不能使用部分的功能，如 CTAGS，XXD，打印，等等，因为它
们需要临时目录来进行正常的操作。$TMP 目录应该对该用户可读可写。最简单的设置
$TMP 的方法是定义逻辑名: 
<code class="example"></code>
<code class="example">        define/nolog TMP SYS$SCRATCH</code>
或者: 
<code class="example">        define/nolog TMP SYS$LOGIN</code>
<code class="example"></code>
</section><hr class="doubleline" /><section class=inner>
<h4></h4>6. 实际使用方法                                         <b class="vimtag"> <a name="vms-usage">vms-usage</a> </b>

通常，你只需要运行 Vim 的一个版本，因而为 Vim 提供一个专用的目录就够了。把所有
的 Vim 运行时目录结构复制到要布署的位置。在你的 LOGIN.COM (在 SYS$LOGIN 目录
下) 里加入如下一行，把逻辑名 $VIM 设置为: 
<code class="example"></code>
<code class="example">        $ define VIM device:&lt;path&gt;</code>
<code class="example"></code>
设置一些符号: 
<code class="example"></code>
<code class="example">        $ ! vi 文本方式启动 Vim。</code>
<code class="example">        $ vi*m  :== mcr VIM:VIM.EXE</code>
<code class="example"></code>
<code class="example">        $ !gvi GUI 方式启动 Vim。</code>
<code class="example">        $ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g</code>
<code class="example"></code>
请查阅如何定制和配置符号的相关内容。

你也许想要在你的主目录 (SYS$LOGIN) 下创建 .vimrc 和 .gvimrc 文件，以覆盖缺省的
设置。

最简单的方法就是简单的使用示例文件并换名。你需要把菜单文件 (MENU.VIM) 和 vimrc
和 gvimrc 文件留在原来的 $VIM 目录。这些是所有用户的缺省设置，个人用户只需要把
他们自己的添加或者改变的设置保存在主目录下的 .vimrc 和 .gvimrc 文件就可以。
这样就没有问题了。

<code class="note">注意</code>: 记住，系统 rc 文件 (所有用户的缺省) 没有开头的 "."。所以，系统文件是: 
<code class="example"></code>
<code class="example">        $VIM:vimrc</code>
<code class="example">        $VIM:gvimrc</code>
<code class="example">        $VIM:menu.vim</code>
<code class="example"></code>
而用户自己的 rc 文件是: 
<code class="example"></code>
<code class="example">        sys$login:.vimrc</code>
<code class="example">        sys$login:.gvimrc</code>
<code class="example"></code>
你可以用 :version 查看是否一切文件位置都正确。

LOGIN.COM 示例: 
<code class="example"></code>
<code class="example">        $ define/nolog VIM DKA0:[UTIL.VIM81]</code>
<code class="example">        $ vi*m :== mcr VIM:VIM.EXE</code>
<code class="example">        $ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40</code>
<code class="example">        $ set disp/create/node=192.168.10.202/trans=tcpip</code>
<code class="example"></code>
<code class="note">注意</code>: 这样的设置就可以了。如果你在单独的服务器或者簇环境下工作，但是你想使用
Vim 作为 DECNET 环境下的中继编辑器，它也够用了。你只要加上 "完整的" 路径: 
<code class="example"></code>
<code class="example">        $ define VIM "&lt;服务器名&gt;[""用户名 密码""]::设备:&lt;路径&gt;"</code>
<code class="example">        $ vi*m :== "mcr VIM:VIM.EXE"</code>
<code class="example"></code>
例如: 
<code class="example"></code>
<code class="example">        $ define VIM "PLUTO::RF10:[UTIL.VIM]"</code>
<code class="example">        $ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! 如果密码需要的话</code>
<code class="example"></code>
如果你同时安装了多个版本，你可以用 $VIMRUNTIME 逻辑名指向正确的 Vim 版本。如果
$VIMRUNTIME 没有定义，Vim 会使用 $VIM 逻辑名。你可以执行 Vim 命令 :help
runtime 来了解关于 $VIMRUNTIME 的更多信息。

系统管理员可能希望设立一个系统范围的 Vim 安装版本。那就加到
SYS$STARTUP:SYLOGICALS.COM 
<code class="example"></code>
<code class="example">        $ define/nolog/sys VIM 设备:&lt;路径&gt;</code>
<code class="example">        $ define/nolog/sys TMP SYS$SCRATCH</code>
<code class="example"></code>
并加到 SYS$STARTUP:SYLOGIN.COM 
<code class="example"></code>
<code class="example">        $ vi*m :== mcr VIM:VIM.EXE</code>
<code class="example">        $ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40</code>
<code class="example"></code>
<code class="example"></code>
这样就能为系统的每个用户设立正常的 Vim 工作环境了。

重 要: OpenVMS 上的 Vim (和其它对大小写不敏感的系统) 的命令行参数假设使用小
写。要说明使用的命令行参数是大写，必须使用 "/" 符号。

示例:
  
<code class="example">        vim -R  filename  ! 意味着: -r 列出交换文件并退出</code>
<code class="example">        vim -/r filename  ! 意味着: -R 只读模式 (类似于 "view")</code>
<code class="example">        vim -u  &lt;vimrc&gt;   ! 意味着: -u 使用 &lt;vimrc&gt; 代替其它的 .vimrc</code>
<code class="example">        vim -/u &lt;gvimrc&gt;  ! 意味着: -U 使用 &lt;gvimrc&gt; 代替其它的 .gvimrc</code>
<code class="example"></code>
</section><hr class="doubleline" /><section class=inner>
<h4></h4>7. GUI 模式的问题                                       <b class="vimtag"> <a name="vms-gui">vms-gui</a> </b>

OpenVMS 是一个真正的大型机操作系统。因此，即使它有一个 GUI 控制台，大多数用户
也不会在普通的操作中使用一个本地的 X/Window 环境。从而不可能很简单的 "就那样"
使用 GUI 模式启动 Vim。但是，也难不到哪儿去。

首先: 你需要一个内建支持 GUI 的可执行版本。

其次: 你需要在你的 VMS 服务器上安装 DECW/Motif，不然你会得到错误报告，提示你一
些共享库找不到。

其三: 如果你选择执行带有附加功能，如 GUI/GTK 的 Vim，你需要安装 GTK 或至少有
GTK 运行环境 (LIBGTK 可在 <a href="http://www.polarhome.com/vim/">http://www.polarhome.com/vim/</a> 下载)。

1) 如果你使用 VMS X/Motif 控制台工作:
   这样启动 Vim: 
<code class="example"></code>
<code class="example">        $ mc device:&lt;path&gt;VIM.EXE -g</code>

   或者在 Vim 命令行提示下输入 :gui 命令。详见 :help gui

2) 如果你用其它的 X/Window 环境，比如 Unix 或者远程的 X VMS 控制台。这样设置连
   接到你的终端的显示: 
<code class="example"></code>
<code class="example">        $ set disp/create/node=&lt;你的 IP 地址&gt;/trans=&lt;传输层-名字&gt;</code>

   然后像地一点那样启动 Vim。你可以从 VMS 文档里查找到更多的帮助，或者从 VMS
   提示符下输入 :help set disp。
   示例: 
<code class="example"></code>
<code class="example">        $ set disp/create/node=192.168.5.159             ! 缺省传输层是 DECnet</code>
<code class="example">        $ set disp/create/node=192.168.5.159/trans=tcpip ! TCP/IP 网络</code>
<code class="example">        $ set disp/create/node=192.168.5.159/trans=local ! 显示在相同的机器上</code>

<code class="note">注意</code>: 你只能定义其中的一个。
更多的信息可以通过在 VMS 提示符下输入 $help set disp 得到。

3) 另外一个很好的方法是 XDM，如果你在 OpenVMS 机器上安装了的话。XDM 客户端可以
   如同 GUI 控制台一样的工作。

4) 如果你在 MS Windows 或者其它非 X/Window 环境上工作，你需要设置 X 服务器，并
   像第二点那样运行 Vim。MS Windows 上有免费的 X 服务器，例如 MIX，Omni X 等。
   也有很好的商业软件，如 eXcursion 或者 ReflectionX，它们都有内建的 DEC 支
   持。

请 <code class="note">注意</code>，没有 GUI 支持的可执行程序在文本模式下启动时，比带有 GUI 支持的稍快。
因此，如果你不打算使用 GUI 特性，可以考虑使用非 GUI 版本的可执行程序。

</section><hr class="doubleline" /><section class=inner>
<h4></h4>8. 有用的提示                                           <b class="vimtag"> <a name="vms-notes">vms-notes</a> </b>

8.1 退格/删除键
8.2 过滤程序
8.3 VMS 文件版本号
8.4 目录名转换
8.5 远程宿主调用
8.6 终端问题
8.7 十六进制编辑和其他外部工具
8.8 执行 vimrc 和 gvimrc 脚本
8.9 从 Vim 里打印
8.10 设置符号
8.11 diff 和其他 GNU 程序
8.12 diff-模式
8.13 允许 C 关键字里出现 '$'
8.14 为初学者提供的 VIMTUTOR (VIM 教程)
8.15 控制台模式启动太慢的问题
8.16 公用 VIM 目录 - 不同的体系结构

8.1 退格/删除键

VMS 存在退格/删除键的不一致问题。:fixdel 不能解决这个问题，你应该用 (<a href="options.html#'cpo'">'cpo'</a> 里
没有 "&lt;"): 
<code class="example"></code>
<code class="example">        :inoremap &lt;C-?&gt; &lt;C-H&gt;   " 在终端模式下</code>
<code class="example">        :inoremap &lt;Del&gt; &lt;C-H&gt;   " 在 gui 模式下</code>
<code class="example"></code>
详见 8.6 章 (终端问题)。
(Bruce Hunsaker &lt;BNHunsaker@chq.byu.edu&gt; Vim 5.3 版本)


8.2 过滤程序

Vim 支持过滤程序；例如，如果你有 sort 程序，并能像 Unix 那样支持输入/输出重定
向 (&lt;输入文件 &gt;输出文件)，你可以用 
<code class="example"></code>
<code class="example">        :map \s 0!'aqsort&lt;CR&gt;</code>
<code class="example"></code>
(Charles E. Campbell，Jr，&lt;cec@gryphon.gsfc.nasa.gov&gt; Vim 5.4 版本)


8.3 VMS 文件版本号

Vim 保存文件会保存到带有更高一级的文件版本号的新文件。试试如下的设置。 
<code class="example"></code>
<code class="example">        :set nobackup        " 不要创建 *.*_ 备份文件</code>
<code class="example">        :set nowritebackup   " 在 VMS 没有任何意义。这是缺省行为。</code>
<code class="example"></code>
从缺省的交换文件恢复文件没有任何问题。详见 :help swapfile

(Claude Marinier &lt;ClaudeMarinier@xwavesolutions.com&gt; Vim 5.5 版本，Zoltan
Arpadffy Vim 5.6 版本)


8.4 目录名转换

Vim 会在内部转换任何 unix 风格的路径名，甚至包括混合 unix/VMS 的路径名，成为
VMS 风格的路径。一些典型的转换类似于: 
<code class="example"></code>
<code class="example">        /abc/def/ghi            -&gt; abc:[def]ghi.</code>
<code class="example">        /abc/def/ghi.j          -&gt; abc:[def]ghi.j</code>
<code class="example">        /abc/def/ghi.j;2        -&gt; abc:[def]ghi.j;2</code>
<code class="example">        /abc/def/ghi/jkl/mno    -&gt; abc:[def.ghi.jkl]mno.</code>
<code class="example">        abc:[def.ghi]jkl/mno    -&gt; abc:[def.ghi.jkl]mno.</code>
<code class="example">          ./                    -&gt; 当前目录</code>
<code class="example">          ../                   -&gt; 相对的父目录</code>
<code class="example">          [.def.ghi]            -&gt; 相对的子目录</code>
<code class="example">           ./def/ghi            -&gt; 相对的子目录</code>

<code class="note">注意</code>: 你可能要用 &lt;、&gt; 尖括号 (设备:&lt;路径&gt;文件名.扩展名;版本)。比如，
rf10:&lt;user.zay.work&gt;test.c;1

(David Elins &lt;delins@foliage.com&gt;，Jerome Lauret
&lt;JLAURET@mail.chem.sunysb.edu&gt; Vim 5.6 版本)


8.5 远程宿主调用

可以使用 Vim 作为中继编辑器。
1. 从远端编辑若干文件: 
<code class="example"></code>
<code class="example">        vi "&lt;服务器&gt;""用户名 密码""::&lt;设备&gt;:&lt;路径&gt;&lt;文件名&gt;;&lt;版本&gt;"</code>
<code class="example"></code>
例如: 
<code class="example">        vi "pluto""zay passwd""::RF10:&lt;USER.ZAY.WORK&gt;TEST.C;1"</code>

<code class="note">注意</code>: 语法非常重要，不然 VMS 会识别为多个参数，而不是一个 (结果是: 文件找不
到)。

2.  设置 Vim 成为中继编辑器。如果 Vim 没有在你的本地上安装，只要设置你的 IP 地
址，包含服务器名字的完整的 Vim 路径，并运行如下的程序: 
<code class="example"></code>
<code class="example">        $ if (p1 .eqs. "") .OR. (p2 .eqs. "") then goto usage</code>
<code class="example">        $ set disp/create/node=&lt;你的 IP 地址&gt;/trans=tcpip</code>
<code class="example">        $ define "VIM "&lt;vim_服务器&gt;""''p1' ''p2'""::&lt;设备&gt;:&lt;vim 路径&gt;"</code>
<code class="example">        $  vi*m :== "mcr VIM:VIM.EXE"</code>
<code class="example">        $ gv*im :== "spawn/nowait mcr VIM:VIM.EXE -g"</code>
<code class="example">        $ goto end</code>
<code class="example">        $ usage:</code>
<code class="example">        $ write sys$output " Please enter username and password as a parameter."</code>
<code class="example">        $ write sys$output " Example: @SETVIM.COM username passwd"</code>
<code class="example">        $ end:</code>

<code class="note">注意</code>: 不要在簇环境下使用 (你也不需要)，不然速度会非常非常慢，不过也许比本地的
Emacs 还要快些。:-)

(Zoltan Arpadffy，Vim 5.6 版本)


8.6 终端问题

如果你的终端名称不为 Vim 所知，那么 Vim 就会尝试缺省的名字，而你会在启动时得到
如下的提示:
</section><hr class="singleline" /><section class=inner>
Terminal entry not found in termcap
'unknown-terminal' not known. Available built-in terminals are:
    builtin_gui
    builtin_riscos
    builtin_amiga
    builtin_ansi
    builtin_vt320
    builtin_vt52
    builtin_pcansi
    builtin_win32
    builtin_xterm
    builtin_iris-ansi
    builtin_debug
    builtin_dumb
defaulting to 'vt320'
</section><hr class="singleline" /><section class=inner>
解决方法是定义合适的缺省终端名: 
<code class="example"></code>
<code class="example">        $ ! 未知的终端名字。让我们使用 vt320 或者 ansi。</code>
<code class="example">        $ ! 注意: 大小写是敏感的。</code>
<code class="example">        $ define term "vt320"</code>
<code class="example"></code>
从 VT100 到 VT320 (如 V300，VT220，VT200) 等终端不需要特别的键盘映射。它们应该
正常工作，例如光标移动，插入，删除等键。但 GUI 模式下的退格键除外。要解决这个
问题，在 .gvimrc 下加入: 
<code class="example"></code>
<code class="example">        inoremap &lt;Del&gt; &lt;BS&gt;</code>
<code class="example"></code>
Vim 也会识别它们为快速终端。

如果你通过远程或者慢速的连接访问 Vim，可以关闭快速终端选项: 
<code class="example"></code>
<code class="example">        set nottyfast   " 设置慢速终端</code>
<code class="example"></code>
<code class="example"></code>
8.7 十六进制编辑和其他外部工具

OpenVMS 和其他系统一个很重要的区别就是 VMS 使用特殊的命令来执行可执行文件: 
<code class="example"></code>
<code class="example">        RUN &lt;路径&gt;文件名</code>
<code class="example">        MCR &lt;路径&gt;文件名 &lt;参数&gt;</code>
<code class="example"></code>
OpenVMS 用户不得不经常<code class="note">注意</code>到，Vim 命令 :! 只是把他们推到 DCL 提示符下。如果你
想以此执行 DCL 的命令，那没有问题。但如果我们想执行诸如 XXD，CTAGS，JTAGS 等程
序，我们就会发现依照 Vim 文档进行操作会出现问题 (比如，:help xxd)。

解决方法: 执行 MC 命令，并加上可执行文件的全路径。例如，执行 :%!xxd 命令可以
用: 
<code class="example"></code>
<code class="example">        :%!mc vim:xxd</code>
<code class="example"></code>
更一般的: 
<code class="example">        :!mc &lt;路径&gt;文件 &lt;参数&gt;</code>

<code class="note">注意</code>: 你可以使用 XXD 和 GUI 菜单下的 CTAGS。

要定制 ctags，可以定义逻辑名 $CTAGS 并使用标准的参数。如: 
<code class="example"></code>
<code class="example">        define/nolog CTAGS "--totals -o sys$login:tags"</code>
<code class="example"></code>
要知道更多的信息，请阅读 :help tagsearch 和
<a href="http://ctags.sourceforge.net/ctags.html">http://ctags.sourceforge.net/ctags.html</a> 提供的 CTAGS 文档。

(Zoltan Arpadffy，Vim 5.6-70 版本)


8.8 执行 vimrc 和 gvimrc 脚本

如果你想使用用从别的平台上通过 ftp 等方式带来的 .vimrc 和 .gvimrc (例如，MS
Windows)，可能会有问题。因为 VMS 使用不同的行尾表示方式。
具体症状就是， Vim 不能执行你的 .vimrc/.gvimrc，即使你说:

<code class="example">        :so sys$login:.vimrc</code>
<code class="example"></code>
一个技巧就是压缩 (例如，zip) 其他平台的文件，并在 VMS 上解压；如果你还有同样的
问题，那么尝试复制-粘贴 (为此，你需要两个系统在一台机器上同时使用。例如，
Windows 上的 Xterm 窗口，或者从 VMS telnet 到 Windows 上)。

(Sandor Kopanyi，&lt;sandor.kopanyi@mailbox.hu&gt; Vim 6.0a 版本)


8.9 从 Vim 里打印

要使得 Vim 能够在 VMS 环境下支持打印 (GUI 模式的版本)，你需要设置 $TMP 逻辑名
并指向某个临时目录，还要设置 SYS$PRINT 逻辑名指向你的缺省打印队列。
示例: 
<code class="example"></code>
<code class="example">        $define SYS$PRINT HP5ANSI</code>
<code class="example"></code>
你可以打印整个缓冲区，或者只是标记的区域。详情参见 :help 的内容。

(Zoltan Arpadffy，Vim 6.0c 版本)


8.10 设置符号

如果我这样设置 gvim，在父终端按 <code class="keystroke">CTRL-Y</code> 就会关闭 gvim。通过设置不同的符号，看来
就能解决这个问题。我的建议是: 
<code class="example"></code>
<code class="example">        $ GV*IM:==SPAWN/NOWAIT/INPUT=NLA0: MCR VIM:VIM.EXE -G -GEOMETRY 80X40</code>
<code class="example"></code>
其中，/INPUT=NLA0: 分隔 gvim 和父终端的标准输入，从而隔绝了父窗口的信号。如果
没有 -GEOMETRY，gvim 窗口会很小，从而菜单很容易在窗口调整大小后引起混淆。

(Carlo Mekenkamp，Coen Engelbarts，Vim 6.0ac 版本)


8.11 diff 和其他 GNU 程序

6.0 版本开始实现了 diff 功能。但是 OpenVMS 并不使用 GNU/Unix 类似的 diff，而内
建的 diff 不能工作。以下是一个简单的解决此问题的方法。安装一个 Unix 兼容的
diff，则 Vim 就能正常在比较模式下工作了。只要你重定义 diff 程序如下: 
<code class="example"></code>
<code class="example">        define /nolog diff &lt;GNU_PATH&gt;diff.exe</code>
<code class="example"></code>
另外一个更复杂的方法参见下面 (8.12 diff-模式)。此外，还有其他的程序，如
patch、make 等等，都会有相同的问题。www.polarhome.com 提供了 Alpha 和 VAX 机器
上的 GNU 程序包，可以用来解决 OpenVMS 上的 GNU 问题。
(Zoltan Arpadffy，Vim 6.1 版本)


8.12 diff-模式

Vim 6.0 或更高版本提供 Vim 的 diff-模式 (见  <a href="version6.html#new-diff-mode">new-diff-mode</a> 、 <a href="diff.html#diff-mode">diff-mode</a>  和
 <a href="usr_08.html#08.7">08.7</a> )。它们使用外部程序 <a href="options.html#'diff'">'diff'</a> 并希望看到 Unix 兼容的 diff 输出结果。不过，
标准的 VMS diff 程序输出的格式与之不兼容。要在 VMS 上使用 Vim 的 diff-模式，你
需要:
    1 安装 Unix 兼容的 diff 程序，例如 GNU diff
    2 告诉 Vim 在 diff-模式下使用 Unix 兼容的 diff。

你可以从 VIM-VMS 网站下载 GNU diff，它是 GNU 工具的一部分。链接是:
<a href="http://www.polarhome.com/vim/files/gnu_tools.zip">http://www.polarhome.com/vim/files/gnu_tools.zip</a>。我建议把它解压到一个单独的
"GNU" 目录下，并建立一个逻辑名 GNU: 指向该目录，例如: 
<code class="example"></code>
<code class="example">   DEFINE GNU    &lt;DISK&gt;:[&lt;DIRECTORY&gt;.BIN.GNU]</code>
<code class="example"></code>
你可以定义 GDIFF 符号，以便在 DCL 提示下使用 GNU diff: 
<code class="example"></code>
<code class="example">   GDIFF :==     $GNU:DIFF.EXE</code>
<code class="example"></code>
现在你可以告诉 Vim 使用新的 diff 程序了。以下程序取自  <a href="diff.html#diff-diffexpr">diff-diffexpr</a> ，但把外
部 diff 程序的调用指向新的 VMS 上的 diff。把它加到你的 .vimrc 文件里: 
<code class="example"></code>
<code class="example">     " Set up vimdiff options</code>
<code class="example">       if v:version &gt;= 600</code>
<code class="example">        " Use GNU diff on VMS</code>
<code class="example">        set diffexpr=MyDiff()</code>
<code class="example">        function MyDiff()</code>
<code class="example">           let opt = ""</code>
<code class="example">           if &amp;diffopt =~ "icase"</code>
<code class="example">             let opt = opt .. "-i "</code>
<code class="example">           endif</code>
<code class="example">           if &amp;diffopt =~ "iwhite"</code>
<code class="example">             let opt = opt .. "-b "</code>
<code class="example">           endif</code>
<code class="example">           silent execute "!mc GNU:diff.exe -a " .. opt .. v:fname_in .. " " ..  v:fname_new ..</code>
<code class="example">                \  " &gt; " .. v:fname_out</code>
<code class="example">        endfunction</code>
<code class="example">      endif</code>
<code class="example"></code>
你现在可以使用 Vim 的 diff-模式，比如，只读方式下比较两个文件: 
<code class="example"></code>
<code class="example">    $ VIM -D/R &lt;FILE1&gt; &lt;FILE2&gt;</code>
<code class="example"></code>
你可以定义新的符号来执行 vimdiff，例如: 
<code class="example"></code>
<code class="example">    $ VIMDIFF     :== 'VIM' -D/R</code>
<code class="example">    $ GVIMDIFF    :== 'GVIM' -D/R</code>
<code class="example"></code>
你现在可以用四种方式比较文件: 
<code class="example"></code>
<code class="example">    1. VMS  diff:  $ DIFF     &lt;FILE1&gt; &lt;FILE2&gt;</code>
<code class="example">    2. GNU  diff:  $ GDIFF    &lt;FILE1&gt; &lt;FILE2&gt;</code>
<code class="example">    3. VIM  diff:  $ VIMDIFF  &lt;FILE1&gt; &lt;FILE2&gt;</code>
<code class="example">    4. GVIM diff:  $ GVIMDIFF &lt;FILE1&gt; &lt;FILE2&gt;</code>
<code class="example"></code>
(Coen Engelbarts，Vim 6.1 版本)


8.13 允许 C 关键字里出现 '$'

DEC C 使用很多带有 '$' 的标识符。ANSI C 则不允许如此，而 Vim 因而把 '$' 当作标
识符结束的标记。通过 <a href="options.html#'iskeyword'">'iskeyword'</a> 选项，你可以改变这一行为。
在你的 .vimrc 文件里加入如下的命令: 
<code class="example"></code>
<code class="example">    autocmd FileType c,cpp,cs  set iskeyword+=$</code>
<code class="example"></code>
你也可以创建如下的文件 $VIM/FTPLUGIN/C.VIM (和/或 CPP.VIM 和 CS.VIM)，并加入如
下的命令: 
<code class="example"></code>
<code class="example">        set iskeyword+=$</code>
<code class="example"></code>
这样，基于单词的命令，如 '*'-搜索命令和 <code class="keystroke">CTRL-]</code> 标签搜索等，都能作用于整个标识
符上了。(VMS 上的 Ctags 从 5.1 版本开始，也支持带 '$' 的 C 关键字)。

(Coen Engelbarts，Vim 6.1 版本)

8.14 为初学者提供的 VIMTUTOR (VIM 教程)

VIMTUTOR.COM DCL 脚本可以帮助 Vim 初学者学习/掌握在 OpenVMS 上运行 Vim 的基本
步骤。在某些二进制版本中，你可以如下方式开始: 
<code class="example"></code>
<code class="example">        @vim:vimtutor</code>
<code class="example"></code>
(Thomas.R.Wyant III，Vim 6.1 版本)

8.15 控制台模式启动太慢的问题

因为 GUI/GTK Vim 在控制台模式中也能很好的工作，很多管理员为整个系统安装了这些
版本的可执行程序。
不幸的是，在远端慢速连接上，GUI/GTK 版本对只想使用控制台的用户会相当慢，这是因
为该版本检测 X 环境的超时关系。

幸运的是，有个简单的方法。管理员只需要同时安装 GUI/GTK 版本和纯控制台版本，如
下: 
<code class="example"></code>
<code class="example">    |- vim73</code>
<code class="example">    |----- doc</code>
<code class="example">    |----- syntax</code>
<code class="example">       vimrc    (系统 rc 文件)</code>
<code class="example">       gvimrc</code>
<code class="example">       gvim.exe (换名的 GUI 或 GTK 版本的 vim.exe)</code>
<code class="example">       vim.exe  (纯控制台版本)</code>
<code class="example"></code>
在 LOGIN.COM 或 SYSLOGIN.COM 为 ex 定义系统符号: 
<code class="example"></code>
<code class="example">        $ define/nolog VIM RF10:[UTIL.VIM73] ! VIM 所在的目录</code>
<code class="example">        $ vi*m  :== mcr VIM:VIM.EXE</code>
<code class="example">        $ gvi*m :== mcr VIM:GVIM.EXE</code>
<code class="example">        $ ! 或者用以下方式启动</code>
<code class="example">        $ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40</code>
<code class="example"></code>
<code class="example"></code>
像这样，没有 X 环境而只想用纯控制台模式的用户就可以避免效率太低的问题了。

(Zoltan Arpadffy，Vim 7.2)

8.16 公用 VIM 目录 - 不同的体系结构

在一个下面这样包含不同体系结构结点的簇里:

$show cluster
View of Cluster from system ID 11655  node: TOR                                                                     18-AUG-2008 11:58:31
+---------------------------------+
|        SYSTEMS        | MEMBERS |
+-----------------------+---------|
|  NODE  |   SOFTWARE   |  STATUS |
+--------+--------------+---------|
| TOR    | VMS V7.3-2   | MEMBER  |
| TITAN2 | VMS V8.3     | MEMBER  |
| ODIN   | VMS V7.3-2   | MEMBER  |
+---------------------------------+

如果能够有一个公共的 VIM 目录，但分别执行不同的可执行程序，会很方便。
有若干实现方案:

方法 1。所有可执行程序在相同目录，但使用不同的名字。
在 login.com 或 sylogin.com 里使用以下的脚本可以很容易做到: 
<code class="example"></code>
<code class="example">        $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"</code>
<code class="example">        $ then</code>
<code class="example">        $       say "VAX platform"</code>
<code class="example">        $       vi*m:== mcr vim:VIM.EXE_VAX</code>
<code class="example">        $ endif</code>
<code class="example">        $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"</code>
<code class="example">        $ then</code>
<code class="example">        $       say "ALPHA platform"</code>
<code class="example">        $       vi*m :== mcr vim:VIM.EXE_AXP</code>
<code class="example">        $ endif</code>
<code class="example">        $ if f$getsyi("ARCH_NAME") .eqs. "IA64"</code>
<code class="example">        $ then</code>
<code class="example">        $      say "IA64 platform"</code>
<code class="example">        $      vi*m :== mcr vim:VIM.EXE_IA64</code>
<code class="example">        $ endif</code>
<code class="example"></code>
方法 2.  不同目录: 
<code class="example"></code>
<code class="example">        $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"</code>
<code class="example">        $ then</code>
<code class="example">        $       say "VAX platform"</code>
<code class="example">        $       define/nolog VIM RF10:[UTIL.VAX_EXE] ! VAX executables</code>
<code class="example">        $ endif</code>
<code class="example">        $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"</code>
<code class="example">        $ then</code>
<code class="example">        $       say "ALPHA platform"</code>
<code class="example">        $       define/nolog VIM RF10:[UTIL.AXP_EXE] ! AXP executables</code>
<code class="example">        $ endif</code>
<code class="example">        $ if f$getsyi("ARCH_NAME") .eqs. "IA64"</code>
<code class="example">        $ then</code>
<code class="example">        $      say "IA64 platform"</code>
<code class="example">        $      define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables</code>
<code class="example">        $ endif</code>
<code class="example">        $! VIMRUNTIME must be defined in order to find runtime files</code>
<code class="example">        $ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]</code>
<code class="example"></code>
使用这种方法一个好的示例可见来自 GNU_TOOLS.ZIP 包的 <code class="special">[GNU]</code>gnu_tools.com 脚本。
可以从这里下载 <a href="http://www.polarhome.com/vim/">http://www.polarhome.com/vim/</a>

(Zoltan Arpadffy，Vim 7.2)

</section><hr class="doubleline" /><section class=inner>
<h4></h4>9. VMS 相关修改记录 (英文)                              <b class="vimtag"> <a name="vms-changes">vms-changes</a> </b>

Version 8.2
- make all changes needed for clean compile build of v8.2 on VMS on all platforms
- fix the call mkdir bug (vicente_polo@yahoo.es)
- test on VSI OpenVMS Alpha and Itanium platforms
- added LUA support
- added XPM support - Motif GUI with toolbar on all platforms
- XPM v3.4.11 libraries for IA64, AXP and VAX are added
- start integrating the new test scripts

Version 8.1
- make necessary changes to build v8.1 on VMS

Version 8.0
- solve the 100% cpu usage issue while waiting for a keystroke
- correct the VMS warnings and errors around handling the INFINITY (used in json.c)
- minor VMS port related changes
- correct the make_vms.mms file for 8.0
- fix [.TESTDIR]make_vms.mms for 8.0

Version 7.4
- Undo: VMS can not handle more than one dot in the filenames use "dir/name" -&gt; "dir/_un_name"
  add _un_ at the beginning to keep the extension
- correct swap file name wildcard handling
- handle iconv usage correctly
- do not optimize on vax - otherwise it hangs compiling crypto files
- fileio.c fix the comment
- correct RealWaitForChar
- after 7.4-119 use different functions lib$cvtf_to_internal_time because Alpha and VAX have
  G_FLOAT but IA64 uses IEEE float otherwise Vim crashes
- guard against crashes that are caused by mixed filenames
- <code class="special">[TESTDIR]</code>make_vms.mms changed to see the output files
- Improve tests, update known issues
- minor compiler warnings fixed
- CTAGS 5.8 +regex included

Version 7.3
- CTAGS 5.8 included
- VMS compile warnings fixed - floating-point overflow warning corrected on VAX
- filepath completion corrected - too many chars were escaped in filename
  and shell commands
- the following plugins are included into VMS runtime:
        genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
        bufexplorer 7.1.7, taglist 4.5
- minor changes in vimrc (just in VMS runtime)
- make_vms.mms - HUGE model is the default
- <code class="special">[TESTDIR]</code>make_vms.mms include as many tests possible
- modify test30 and test54 for VMS
- enable FLOAT feature in VMS port
- os_vms.txt updated

Version 7.2 (2008 Aug 9)
- VCF files write corrected
- CTAGS 5.7 included
- corrected make_vms.mms (on VAX gave syntax error)

Version 7.1 (2007 Jun 15)
- create TAGS file from menu

Version 7
- Improved low level char input (affects just console mode)
- Fixed plugin bug
- CTAGS 5.6 included

Version 6.4 (2005 Oct 15)
- GTKLIB and Vim build on IA64
- colors in terminal mode
- syntax highlighting in terminal mode
- write problem fixed (extra CR)
- ESC and ESC sequence recognition in terminal mode
- make file changed to support new MMS version
- env variable expansion in path corrected
- printing problems corrected
- help text added for case insensitive arguments

Version 6.3 (2004 May 10)
- Improved vms_read function
- CTAGS v5.5.4 included
- Documentation corrected and updated

Version 6.2 (2003 May 7)
- Corrected VMS system call results
- Low level character input is rewritten
- Correction in tag and quickfix handling
- First GTK build
- Make file changes
    - GTK feature added
    - Define for OLD_VMS
    - OpenVMS version 6.2 or older
- Documentation updated with GTK features
- CTAGS v5.5 included
- VMS VIM tutor created

Version 6.1 (2002 Mar 25)
- TCL init_tcl() problem fixed
- CTAGS v5.4 included
- GNU tools binaries for OpenVMS
- Make file changes
    - PERL, PYTHON and TCL support improved
    - InstallVMS.txt has a detailed description HOWTO build
- VMS/Unix file handling rewritten
- Minor casting and bug fixes

Version 6.0 (2001 Sep 28)
- Unix and VMS code has been merged
        - separated "really" VMS related code
        - included all possible Unix functionality
        - simplified or deleted the configuration files
        - makefile MAKE_VMS.MMS reviewed
- menu changes (fixed printing, CTAGS and XXD usage)
- fixed variable RMS record format handling anomaly
- corrected syntax, ftplugin etc files load
- changed expand_wildcards and expandpath functions to work more general
- created OS_VMS_FILTER.COM - DECC-&gt;VAXC pre-processor directive convert
  script.
- Improved code's VAXC and new DECC compilers compatibility
- changed quickfix parameters:
        - errormessage format to suite DECC
        - search, make and other commands to suite VMS system
- updated and renamed MMS make files for Vim and CTAGS.
- CTAGS has been removed from source distribution of Vim but it will remain
  in OpenVMS binary distributions.
- simplified build/configuration procedure
- created INSTALLvms.txt - detailed compiling instructions under VMS.
- updated test scripts.

Version 5.8 (2001 Jun 1)
- OS_VMS.TXT updated with new features.
- other minor fixes.
- documentation updated
- this version had been tested much more than any other OpenVMS version
  earlier

Version 5.7 (2000 Jun 24)
- New CTAGS v5.0 in distribution
- Documentation updated

Version 5.6 (2000 Jan 17)
- VMS filename related changes:
        - version handling (open everything, save to new version)
        - correct file extension matching for syntax (version problem)
        - handle &lt;,&gt; characters and passwords in directory definition
        - handle internode/remote invocation and editing with passwords
        - OpenVMS files will be treated case insensitive from now
        - corrected response of expand("%:.") etc path related functions
        (in one word: VMS directory handling internally)
- version command
        - corrected (+,-) information data
        - added compiler and OS version
        - added user and host information
        - resolving $VIM and $VIMRUNTIME logicals
- VMS port is in MAX_FEAT (maximum features) club with Unix, Win32 and OS/2.
        - enabled farsi, rightleft etc. features
        - undo level raised up to 1000
- Updated OS_VMS.MMS file.
        - maximum features ON is default
        - Vim is compilable with +perl, +python and +tcl features.
        - improved MMK compatibility
- Created MAKEFILE_VMS.MMS, makefile for testing Vim during development.
- Defined DEC terminal VT320
        - compatibility for VT3*0, VT2*0 and VT1*0 - ANSI terminals
          backwards, but not VT340 and newer with colour capability.
        - VT320 is default terminal for OpenVMS
        - these new terminals are also fast ttys (default for OpenVMS).
        - allowed dec_mouse ttym
- Updated files vimrc and gvimrc with VMS specific suggestions.
- OS_VMS.TXT updated with new features.

Version 5.5 (1999 Dec 3)
- Popup menu line crash corrected.
- Handle full file names with version numbers.
- Directory handling (CD command etc.)
- Corrected file name conversion VMS to Unix and v.v.
- Correct response of expand wildcards
- Recovery is working from this version under VMS as well.
- Improved terminal and signal handing.
- Improved OS_VMS.TXT

Version 5.4 (1999 Sep 9)
- Cut and paste mismatch corrected.
- Motif directories during open and save are corrected.

Version 5.3 (1998 Oct 12)
- Minor changes in the code
- Standard distribution with +GUI option

Version 5.1 (1998 Apr 21)
- Syntax and DEC C changes in the code
- Fixing problems with the /doc subdirectory
- Improve OS_VMS.MMS

Version 4.5 (1996 Dec 16)
- First VMS port by Henk Elbers &lt;henk@xs4all.nl&gt;

</section><hr class="doubleline" /><section class=inner>
<h4></h4>10. 作者                                                <b class="vimtag"> <a name="vms-authors">vms-authors</a> </b>

OpenVMS 文档和执行文件的维护者是:
Zoltan Arpadffy &lt;arpadffy@polarhome.com&gt;
OpenVMS Vim page: <a href="http://www.polarhome.com/vim/">http://www.polarhome.com/vim/</a>

本文档采用了较早 OS_VMS.TXT 版本的作者和贡献者提供的部分内容和<code class="note">备注</code>。他们是:
        Charles E. Campbell, Jr. &lt;cec@gryphon.gsfc.nasa.gov&gt;
        Bruce Hunsaker &lt;BNHunsaker@chq.byu.edu&gt;
        Sandor Kopanyi &lt;sandor.kopanyi@mailbox.hu&gt;

 vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
